/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package micarro;

/**
 *
 * @author Ale
 */
public class Radio implements iRadio{
 
    boolean estado=false;
    boolean on=false;
    int cont=0;
    int cont1=0;
    float frecuenciaAM=530;
    float frecuenciaFM=88;
    float saveFreqAM[]=new float[12];
    float saveFreqFM[]=new float[12];
   
    
    
    /* 
     * Enciende o apaga el Radio.
     * @return True si el radio se encendió, o false si el
     * radio se apagó.
     */
    @Override
   public boolean Power(){
        if(cont==0){
            cont=1;
            on=true;
            return true;
           }
        else if(cont==1){
            cont=0;
            on=false;
            return false;
          }
        return false;
        
   }
    
    /* 
     * Cambia la banda de AM a FM o viceversa.
     * @return True si la banda es AM y false si la banda
     * es FM.
     */
    @Override
    public boolean ChangeSignal(){
        if(cont1==0){
            cont1=1;
            estado=true;
            return true;
           }
        else if(cont1==1){
            cont1=0;
            estado=false;
            return false;
          }
        return false;
    }
    
    /* 
     * Adelanta la frecuencia a la siguiente posible.
     * @return La frecuencia a la que se pasa.
     */
    @Override
    public float NextFreq(){
        if(estado){
            if(frecuenciaAM<1610)
                frecuenciaAM=frecuenciaAM+15;
            return frecuenciaAM;
            }
        else if(!estado){
            if(frecuenciaFM<107)
                frecuenciaFM=frecuenciaFM+1;
            return frecuenciaFM;
        }
        return 0;
    }
    
    /*
     * Graba la frecuencia actual en el botón dado. Existen únicamente
     * 12 posiciones de memoria (botones) por cada Banda, y se encuentran
     * en el rango [1,12].
     * @return True si la operación fue exitosa, false en caso contrario.
     */
    @Override
    public boolean SaveFreq( int Boton ){
        if(estado){
            saveFreqAM[Boton]=frecuenciaAM;
            return true;
        }
        if(!estado){
            saveFreqFM[Boton]=frecuenciaFM;
            return true;
        }
        return false;
    }
    
    /*
     * Cambia la estación a la grabada en el botón dado. Devuelve la estación
     * actual que se escucha. Existen únicamente 12 posiciones de memoria por
     * cada Banda, y se encuentran en el rango [1,12].
     * @return La frecuencia (nueva) a la que está sintonizada la radio.
     */
    @Override
    public float ChangeTune( int Boton ){
        if(estado){
            frecuenciaAM=saveFreqAM[Boton];
            return saveFreqAM[Boton];
        }
        else{
            frecuenciaFM=saveFreqFM[Boton];
            return saveFreqFM[Boton];
        }
        
    }
    
    /*
     * @return True si la radio está encendida, false en caso contrario.
     */
    @Override
    public boolean IsOn(){
        return on;
        
    }
    
    /*
     * @return True si la banda es AM, y false si es FM.
     */
    @Override
    public boolean IsAm(){
        
        return estado;
    }
    
    /*
     * @return La frecuencia actual a la que está sintonizada la radio.
     */
    @Override
    public float GetFreq(){
        if(estado)
            return frecuenciaAM;
        else if(!estado)
            return frecuenciaFM;
        return 0;
    }
    
}

